俗话说光说不练假把式,实习中发现了自己许多不足,特此挖个坑,做个简单的博客系统以便对于web开发有更深的理解,再者为以后做打算,毕竟基于github的博客还是有一定的不便的,博客基于springboot2.1开发,shiro实现权限控制,插件EditorMD。毕竟是填坑版,还有许多功能不完善甚至没有Σ( ° △ °|||)︴
一. 系统简介
1.1 开发工具
软件:intellij
框架:springboot、shiro(安全框架)
前端:thymeleaf + bootstrap
日志:logback
数据库:mysql
插件:Editormd(支持markdown)
1.2 效果预览
鉴于目前系统距离完善还相差甚远,遂赶紧贴几张图填填坑。鉴于篇幅这里主要介绍shiro配置
资源地址:https://github.com/zyz-1998/blog-system
二. shiro简介
Apache shiro是一个功能强大且易于使用的Java安全框架,可执行身份验证,授权,加密和会话管理。
理解shiro首要理解两张图即可,如下所示
2.1 系统架构
在shiro架构中,有3个最主要的组件:Subject,SecurityManager,Realm。
Subject本质上就是当前访问用户的抽象描述。
SecurityManager是Shiro架构中最核心的组件,通过它可以协调其他组件完成用户认证和授权。换句话来说,SecurityManager就是Shiro框架的控制器。
Realm定义了访问数据的方式,用来连接不同的数据源,如:LDAP,关系数据库,配置文件等等。
2.2 核心架构
Authenticator(认证):负责执行用户的登录操作。
Authentication Strategy(认证策略):是个无状态的组件,在认证过程中会进行4次调用。然后将Realm中的结果信息封装至AuthenticationInfo实例中并返回作为Subject的身份信息。
Authorizer(授权):负责用户的访问权限控制。
2.3 具体实现
- 定义实体用户信息、用户角色、用户权限
1 | //UserInfo |
1 | //SysRole |
1 | //SysPermission |
- 定义Realm,继承AuthorizingRealm重写以下两个方法
1 |
|
- 最后进行shiro配置,核心代码如下
1 | ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); |